package com.opengroupe.resources;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.opengroupe.dto.CategorieDto;
import com.opengroupe.entities.Categorie;
import com.opengroupe.service.common.CommonService;
import com.opengroupe.service.pc.PCService;
import com.opengroupe.utils.QrhWsUtils;
/**
 * @author MMB11447
 *
 */
@Service("categorieResource")
@Path("/categorie")
public class CategorieResource {

	@Autowired
	private PCService pcService;
	
	@Autowired
	private CommonService commonService;
	
	private Gson gson = new GsonBuilder().serializeNulls().setPrettyPrinting().create();
	
	@GET
	@Produces("application/json")
	@Path("/getAll")
	public synchronized String allCategorie() {
		
		List<Categorie> categories = commonService.allCategorie();
		
		List<CategorieDto> categorieDtos = new ArrayList<CategorieDto>();
		
		for(Categorie categorie : categories){
			categorieDtos.add(QrhWsUtils.convertCategorieToCategorieDto(categorie));
		}
		
		if(categories != null && categories.size() > 0){
			return gson.toJson(categorieDtos);
		} else {
			return "";
		}
	}
	
	@GET
	@Produces("application/json")
	@Path("/update")
	public synchronized String updateCategorie(@QueryParam("idCategorie") String idCategorie, @QueryParam("libelleCategorie") String libelleCategorie){
		try{
			Categorie categorie = pcService.modifierCategorie(Integer.parseInt(idCategorie), libelleCategorie);
			CategorieDto categorieDto = QrhWsUtils.convertCategorieToCategorieDto(categorie);
			return gson.toJson(categorieDto, CategorieDto.class);
		} catch (Exception e){
			return null;
		}
	}
	
	@DELETE
	@Produces("application/json")
	@Path("/delete")
	public synchronized String deleteCategorie(String idCategorie){
		try{
			pcService.deleteCategorie(idCategorie);
			return "SUCESS";
		} catch (Exception e) {
			return "FAILURE";
		}
	}
	
	@GET
	@Produces("application/json")
	@Path("/create")
	public synchronized String createCategorie(@QueryParam("libelleCategorie") String libelleCategorie) {
		
		Categorie categorie = new Categorie();
		categorie.setLibelleCategorie(libelleCategorie.trim());
		
		try {
			categorie = pcService.createCategorie(categorie);
			CategorieDto categorieDto = QrhWsUtils.convertCategorieToCategorieDto(categorie);
			return gson.toJson(categorieDto, CategorieDto.class);
		} catch (Exception e) {
			return null;
		}
	}
	
}
